// 统一的视频时长解析与格式化工具
// 将后端可能返回的多种时长格式解析为“分钟(可含小数)”并统一格式化展示

/**
 * 解析时长到“分钟”（支持 hh:mm:ss、mm:ss、中文格式、纯数字），保留秒对应的小数部分
 * 例如："01:30" -> 1.5；"1小时2分钟30秒" -> 62.5
 */
export function parseDurationToMinutes(value: any): number {
  if (value == null) return 0
  if (typeof value === 'number' && !Number.isNaN(value)) {
    // 默认后端 number 表示“分钟”
    return Math.max(0, value)
  }
  if (typeof value !== 'string') return 0

  const raw = value.trim()
  if (!raw) return 0

  // hh:mm:ss 或 mm:ss
  const hhmmss = raw.match(/^\s*(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?\s*$/)
  if (hhmmss) {
    const h = parseInt(hhmmss[1] || '0', 10)
    const m = parseInt(hhmmss[2] || '0', 10)
    const s = parseInt(hhmmss[3] || '0', 10)
    const totalMinutes = h * 60 + m + s / 60
    return Math.max(0, totalMinutes)
  }

  // 中文：x小时y分钟z秒 / x小时 / y分钟 / z秒
  const zhHour = raw.match(/(\d+)\s*小时/)
  const zhMinute = raw.match(/(\d+)\s*分(钟)?/)
  const zhSecond = raw.match(/(\d+)\s*秒/)
  if (zhHour || zhMinute || zhSecond) {
    const h = zhHour ? parseInt(zhHour[1], 10) : 0
    const m = zhMinute ? parseInt(zhMinute[1], 10) : 0
    const s = zhSecond ? parseInt(zhSecond[1], 10) : 0
    return Math.max(0, h * 60 + m + s / 60)
  }

  // 纯数字：默认按“分钟”处理
  const onlyNumber = parseFloat(raw)
  if (!Number.isNaN(onlyNumber)) return Math.max(0, onlyNumber)
  return 0
}

/**
 * 将分钟（可含秒对应的小数部分）格式化为中文显示：X小时Y分钟Z秒 / Y分钟Z秒
 * 例如：1.5 -> "1分钟30秒"；62.5 -> "1小时2分钟30秒"
 */
export function formatDuration(minutes: number): string {
  if (!minutes || minutes <= 0) return '0秒'
  // 拆分分钟和秒
  const wholeMinutes = Math.floor(minutes)
  let seconds = Math.round((minutes - wholeMinutes) * 60)
  let mins = wholeMinutes
  let hours = 0

  // 纠正四舍五入导致的 60 秒
  if (seconds === 60) {
    seconds = 0
    mins += 1
  }

  if (mins >= 60) {
    hours = Math.floor(mins / 60)
    mins = mins % 60
  }

  if (hours > 0) {
    return `${hours}小时${mins}分钟${seconds ? `${seconds}秒` : ''}`.trim()
  }
  return `${mins}分钟${seconds ? `${seconds}秒` : ''}`.trim()
}